#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>

using namespace std;

// 线程函数
void *threadFunc(void *arg)
{
    // 线程分离
    // 将当前线程设置为分离状态，这样当线程执行结束后，系统会自动回收其资源
    // 否则主线程需要调用pthread_join来回收线程资源
    pthread_detach(pthread_self());

    // 子线程的ID号
    int cnt = 60;
    while (cnt--)
    {
        cout << "I am new thread, id:" << pthread_self() << endl;
        sleep(1);
    }
    
    // 线程退出
    pthread_exit(NULL);

    // 进程退出
    // _exit(0);
}

int main()
{
#if 1
    // 进程号
    pid_t pid = getpid();
    cout << "pid:" << pid << endl;

    // 线程号（主线程ID号）
    pthread_t threadId = pthread_self();
    cout << "threadId:" << threadId << endl;
#endif

#if 1
    // 创建线程
    pthread_t tid; // 子线程ID号
    int ret = pthread_create(&tid, NULL, threadFunc, NULL);
    if (ret != 0)
    {
        perror("thread creat error");
        exit(-1);
    }
    cout << "tid:" << tid << endl;
    
    // // 阻塞回收线程资源
    // pthread_join(tid, NULL);

    // 主线程（进程）
    int cnt = 5;
    while (cnt--)
    {
        cout << "I am main process." << endl;
        sleep(1);
    }
#endif
    return 0;
}